Модуль № 2 · Задания · Администратор платформы

Задания

Расписание и журнал — один экран: у задания два лица, будущее и прошлое, и вопрос всегда один — «почему ночная выгрузка не сделалась» (Р601).

Задания · выбор открывает прогоны
Поля «команда» и «SQL» на экране нет и не будет (R-JOB1): задание вызывает тип из закрытого каталога. Планировщик, умеющий выполнить произвольный код, — обход всей ролевой модели через самый неприметный экран системы: право «настроить задание» превращается в право сделать что угодно от чужого имени (Р602).

Календарь нагрузки

Сутки по часам: где сходятся запуски, где окно свободно. Появляется с A3 — до неё расписание ведут по одному заданию.

в пределах одновременных заданий не больше — (PARAM-JOB-CONCURRENCY) перегруз запусков в час больше предела — очередь начнёт отставать
В 02:00 сходятся четыре задания при пределе — одновременных. Это и есть источник исхода «пропущен по перекрытию» и роста PARAM-MON-QUEUE-LAG на экране 2.4.2: лечится разносом расписания, а не увеличением окна (R-JOB7).
Что сходится в 02:00
ЗаданиеЗапускМедианаЗамечание

Кнопки «остановить всё» здесь нет намеренно: массовое отключение делается выключением конкретных заданий, каждое — с записью. Один тумблер «выключить планировщик» однажды останется выключенным, и никто не вспомнит почему.

Прогоны за сутки

Сквозной срез журнала по всем заданиям. Из прогона виден путь обратно — к заданию и его расписанию.

Доля успешных прогонов, четырнадцать суток
ПрогонЗаданиеДлительность ИсходРезультат и причина
Пропуск — отдельный исход (R-JOB5). Свести его к успеху нельзя: расписание молча не выполнилось. Свести к ошибке тоже нельзя: ошибка разбирается в задании, а пропуск — в расписании и нагрузке. Площадки, где пропуск зелёный, узнаю́т о нём из вопроса «а где отчёт за апрель».
Повторы показаны отдельными прогонами (R-JOB8): «успех со второй попытки» и «успех» — разные факты, и первый означает, что что-то нестабильно. Число попыток ограничено PARAM-JOB-RETRY, пауза — PARAM-JOB-RETRY-DELAY.

Типы заданий

Каталог закрыт (R-JOB1): перечень типов, их параметры и требуемые права объявляет код системы. Администратор выбирает тип, а не пишет действие.

ТипЧто делаетТребует полномочия Системная УЗПерекрытие
Учётная запись «системная» допускается только у типов, объявленных инфраструктурными (очистка временных файлов, резервная копия), и не может быть выбрана для типов, работающих с данными организации: иначе «системное» задание становится способом читать чужую организацию мимо RLS (Р197).
Права проверяются при каждом запуске по действующим полномочиям владельца, а не при создании задания (R-JOB2). Иначе задание — вечный доступ: уволенный сотрудник руками уже не выгрузит, а заданием выгружает каждую ночь. Ровно это ищет ресертификация (R-AR*) и ровно этого она не найдёт, если проверка была однажды.
Контракт экрана — для разработчика Vue/Laravel

Источник данных

Задания и прогоны — таблицы приложения; каталог типов — код (реестр обработчиков Laravel, JobType), в API отдаётся только чтением. Параметры — config('takt.systemParams'), раздел ЗАДАНИЯ. Медиана длительности считается по прогонам того же задания, а не задаётся вручную.

Компоненты

JobListреестр: тип, расписание, ближайший запуск, владелец, последний прогон. Пометка владельца в статусе «заблокирован»/«уволен» — до наступления расписания (R-JOB9).
RunLogпрогоны выбранного задания: исход из словаря состояний, длительность вместе с медианой (R-JOB10), попытка повтора отдельной строкой (R-JOB8).
LoadCalendarсутки по часам, порог — PARAM-JOB-CONCURRENCY; A3.
JobFormрасписание, параметры типа, владелец, политика догона. Полей «команда»/«SQL» не существует (R-JOB1).

Права

Просмотр — R на OBJ-ADM-JOB; правка расписания и включение — U; ручной запуск и отмена — U плюс право самого типа задания; смена владельца — операция с записью в ленту событий (передача прав исполнения).

Границы

Прогоны в ленту событий не переносятся (R-JOB4): тысяча успешных очисток кэша в ленте аудита — способ утопить в ней настоящие события. Обратное направление обязательно: изменения данных, сделанные заданием, пишутся в ленту как обычные, с заданием и прогоном как основанием. Хранение прогонов — PARAM-JOB-LOG-KEEP, удаление автоматическое (R-JOB11).

Чего на экране нет

Произвольного кода и SQL (R-JOB1), кнопки «остановить планировщик», трендов длительности за месяцы — это 2.4.4.